package com.gomoku.controller;

import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.application.Platform;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import java.io.IOException;
import java.net.URL;

public class SceneManager {
    private static Stage primaryStage;

    public static void setPrimaryStage(Stage stage) {
        primaryStage = stage;
        primaryStage.setTitle("五子棋游戏"); // 添加窗口标题
    }

    public static void loadScene(String fxmlPath) {
        try {
            // 使用更安全的资源获取方式
            URL fxmlUrl = SceneManager.class.getResource("/com/gomoku/view/" + fxmlPath + ".fxml");

            if (fxmlUrl == null) {
                throw new RuntimeException(
                        "FXML文件未找到，请检查以下路径是否存在：\n" +
                                "src/main/resources/com/gomoku/view/" + fxmlPath + ".fxml\n" +
                                "当前类加载器路径：" + SceneManager.class.getResource("")
                );
            }

            System.out.println("[DEBUG] 加载FXML资源: " + fxmlUrl);

            FXMLLoader loader = new FXMLLoader(fxmlUrl);
            Parent root = loader.load();

            Scene scene = new Scene(root, 800, 600);
            primaryStage.setScene(scene);
            primaryStage.centerOnScreen(); // 窗口居中显示

            // 添加窗口关闭事件处理
            primaryStage.setOnCloseRequest(event -> {
                System.out.println("应用程序正在退出...");
                Platform.exit();
                System.exit(0);
            });

        } catch (IOException e) {
            showErrorDialog("FXML加载失败",
                    "无法加载界面: " + fxmlPath + "\n" +
                            "错误类型: " + e.getClass().getSimpleName() + "\n" +
                            "错误详情: " + e.getMessage());

            // 打印完整堆栈跟踪到控制台
            System.err.println("===== 错误堆栈跟踪 =====");
            e.printStackTrace();
        }
    }

    private static void showErrorDialog(String title, String message) {
        Platform.runLater(() -> {
            Alert alert = new Alert(AlertType.ERROR);
            alert.setTitle(title);
            alert.setHeaderText("资源加载错误");
            alert.setContentText(message);
            alert.showAndWait();
        });
    }

    // 新增方法：检查资源是否存在
    public static boolean checkResourceExists(String path) {
        URL resUrl = SceneManager.class.getResource(path);
        if (resUrl == null) {
            System.err.println("[资源检查] 文件不存在: " + path);
            return false;
        }
        System.out.println("[资源检查] 找到资源: " + resUrl);
        return true;
    }
}